package com.lihang.rabbit1.common.exception;

import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.Collection;
import java.util.Map;

/**
 * 断言工具类，用于抛出业务异常
 */
public class Assert {

    /**
     * 断言对象不为空
     *
     * @param object  对象
     * @param message 错误消息
     */
    public static void notNull(Object object, String message) {
        if (object == null) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言对象不为空
     *
     * @param object  对象
     * @param code    错误码
     * @param message 错误消息
     */
    public static void notNull(Object object, Integer code, String message) {
        if (object == null) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言字符串不为空
     *
     * @param text    字符串
     * @param message 错误消息
     */
    public static void hasText(String text, String message) {
        if (!StringUtils.hasText(text)) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言字符串不为空
     *
     * @param text    字符串
     * @param code    错误码
     * @param message 错误消息
     */
    public static void hasText(String text, Integer code, String message) {
        if (!StringUtils.hasText(text)) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言集合不为空
     *
     * @param collection 集合
     * @param message    错误消息
     */
    public static void notEmpty(Collection<?> collection, String message) {
        if (CollectionUtils.isEmpty(collection)) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言集合不为空
     *
     * @param collection 集合
     * @param code       错误码
     * @param message    错误消息
     */
    public static void notEmpty(Collection<?> collection, Integer code, String message) {
        if (CollectionUtils.isEmpty(collection)) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言Map不为空
     *
     * @param map     Map
     * @param message 错误消息
     */
    public static void notEmpty(Map<?, ?> map, String message) {
        if (ObjectUtils.isEmpty(map)) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言Map不为空
     *
     * @param map     Map
     * @param code    错误码
     * @param message 错误消息
     */
    public static void notEmpty(Map<?, ?> map, Integer code, String message) {
        if (ObjectUtils.isEmpty(map)) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言表达式为真
     *
     * @param expression 表达式
     * @param message    错误消息
     */
    public static void isTrue(boolean expression, String message) {
        if (!expression) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言表达式为真
     *
     * @param expression 表达式
     * @param code       错误码
     * @param message    错误消息
     */
    public static void isTrue(boolean expression, Integer code, String message) {
        if (!expression) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 断言表达式为假
     *
     * @param expression 表达式
     * @param message    错误消息
     */
    public static void isFalse(boolean expression, String message) {
        if (expression) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言表达式为假
     *
     * @param expression 表达式
     * @param code       错误码
     * @param message    错误消息
     */
    public static void isFalse(boolean expression, Integer code, String message) {
        if (expression) {
            throw new BusinessException(code, message);
        }
    }
}